/**
 * 生成基础axios对象，并对请求和响应做处理
 * 前后端约定接口返回解构规范
 * {
 *    code:0,
 *    data:"成功",
 *    message:""
 * }
 */
import axios from 'axios'
import { ElMessage } from 'element-plus'
import UserToken from "@/user/UserToken";


// 创建一个独立的axios实例
const httpUtils = axios.create({
  // 配置请求超时时间
  timeout: 10000,
  // 如果用的JSONP，可以配置此参数带上cookie凭证，如果是代理和CORS不用设置
  withCredentials: true
});


// 请求拦截
httpUtils.interceptors.request.use(config => {
  //自动携带token
  config.headers.token = UserToken.token();
  return config;
});


// 返回拦截
httpUtils.interceptors.response.use((response)=>{
  const status = response.status
  if (status < 200 || status >= 300 && status != 401 && status != 500) {
    ElMessage.error(responseStatus(status));
    return ;
  }
  return response.data;
},()=>{
  ElMessage.error('网络请求异常，请稍后重试!');
});

const responseStatus = (status) => {
  let message = ''
  switch (status) {
    case 400:
      message = '请求错误(400)'
      break
    case 401:
      message = '未授权，请重新登录(401)'
      break
    case 402:
      message = '拒绝访问(402)'
      break
    case 404:
      message = '请求出错(404)'
      break
    case 408:
      message = '请求超时(408)'
      break
    case 500:
      message = '服务器错误(500)'
      break
    case 501:
      message = '服务未实现(501)'
      break
    case 502:
      message = '网络错误(502)'
      break
    case 503:
      message = '服务不可用(503)'
      break
    case 504:
      message = '网络超时(504)'
      break
    case 505:
      message = 'HTTP版本不受支持(505)'
      break
    default:
      message = `连接出错(${status})!`
  }
  return `${message}，请检查网络或联系管理员！`
}

export default httpUtils
